package practice

import "fmt"

func Multiply3Nums(a int, b int, c int) int {
	return a * b * c
}

type A struct {
	Value int
	Name  string
}

func DoSomethingA(a *A) {
	b := a
	b.Value = 200
	b.Name = "Jay"
	fmt.Println("Function A: ", b)
}

func DoSomethingB(a A) {
	b := &a
	b.Value = 300
	b.Name = "Jimmy"
	a = *b
	fmt.Println("Function B: ", b)
}

func getX2AndX3(in int) (int, int) {
	return 2 * in, 3 * in
}

func getX2AndX3_2(in int) (x2 int, x3 int) {
	x2 = 2 * in
	x3 = 5 * in
	return
}

var (
	num          int = 10
	numx2, numx3 int
)

func Test1() {
	var aInstance A
	aInstance = A{Value: 100}
	fmt.Println(aInstance)
	DoSomethingA(&aInstance) // 调用第一个函数
	DoSomethingB(aInstance)  // 调用第二个函数
	fmt.Println(aInstance)

	numx2, numx3 = getX2AndX3(num)
	printValues()
	numx2, numx3 = getX2AndX3_2(num)
	printValues()

	minNum := min(10, 8, 3, 5, 100, 20)
	fmt.Println("最小值是:", minNum)
}
func printValues() {
	fmt.Printf("num = %d, 2x num = %d, 3x num = %d\n", num, numx2, numx3)
}

// min 函数返回一个或多个整数中的最小值。
// 它接受一个整数可变参数列表，如果没有提供任何数字，则默认返回0。
func min(s ...int) int {
	// 当传入的整数列表为空时，返回0。
	if len(s) == 0 {
		return 0
	}

	// 初始化最小值为列表中的第一个元素。
	min := s[0]

	// 遍历整数列表以找到最小值。
	for _, v := range s {
		// 如果当前元素小于已知的最小值，则更新最小值。
		if v < min {
			min = v
		}
	}

	// 返回找到的最小值。
	return min
}
